





                              Comments by the author.




                  This  assembler  started  life  as  a  public domain 8080


          assembler program but I don't know the source.    My  thanks  are


          due to the unknown (to me) author.



                  The  original  version  I  couldn't  make work so I don't


          know much about it but I did follow its general architecture.  It


          has  evolved  over  several  re-writes  and now bears very little


          resemblance to the original.



                  This version has been in use for about two years and  was


          written  because  the  only  assembler  I  had  available  was an


          elderly Cromemco  one  which  was  abysmally   slow.      "zasmb"


          assembles  at  something  over  7,000  lines  per minute when the


          source is read from a ram disc and the code is also written  back


          to  one.  This  is  quite  a  reasonable speed and is quite a lot


          faster than the  MicroSoft  M80  although  slower  than  the  SLR


          Systems assembler.



                  It  is  a classical two pass assembler with an indirectly


          hashed symbol table which accounts for much of its speed.



                  It  has  one  or  two  features  which  are  not  usually


          available.  One  is  the facility to return to an editor with the


          cursor pointing to the error if one occurs.    This  is  done  by


          putting  a  command into the CCP buffer together with the row and


          column numbers.  If the editor can pick these  up  it  can  start


          the edit  with  the  cursor  at  the position of the error.  This


          facility speeds up assembly program development considerably.



                  My favourite editor  is  "WordMaster"  a  predecessor  of


          "Wordstar".   I  disassembled  it and then modified it to suit my


          H19 terminal and then again to make it postion the cursor at  the


          row and  column  given  in the command lin as arguments.  This is


          not a task to be  taken  lightly!    If  you  want  to  make  the


          assembler  communicate  with  your  editor,  and  this  is highly


          desirable, get one for which the source code is available.



                  Communication  between  the  editor  and  the   assembler


          causes  a  dramatic  increase  in  the speed of assembly language


          program development and a  marked  decrease  in  the  frustration


          factor.




                  The  second feature is the provision of a pseudo-operator


          "forg" (false origin).  This enables  code  to  be  assembled  in


          line  but  executed  at an origin different from that at which it


          is assembled.  This facility was included so that a loader  could


          be  incorporated  in  a  new  version of the CP/M console command


          processor which has its  origin  at  100H  and  the  loader  then


          transferred to  just below the BDOS section of CP/M.  If a normal


          "org" statement were to be used the CCP file would be nearly  64K


          long.




                  There  are  a  number of improvements which might be made


          to "zasmb" which would be advantageous.  These are:



                  local labels,


                  some control structures,


                  "ne," to be equivalent to "nz," in jumps


                  "eq,"                          "z,"


                  more type (word/byte/string) checking in expressions.




                  A much more fundamental fundamental change  would  be  to


          alter  the  input  routines to use a circular buffer with several


          sets of pointers so as to avoid the shift  from  the  disc  input


          buffer to  the  line  buffer  and then to the token buffer.  This


          would probably speed the assembler up by 50 per cent  or  so  and


          break the  10,000  line  per  minute  barrier.    I  don't have a


          profiler so I can't find the critical routines although they  are


          pretty certain to be in the character input.



                  If  anyone  carries  out  any  of these improvements they


          might send me a copy of the revised code.



